// 脚本编写 简单移动工具 原理 -利用程序替换
#include <iostream>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

using std::cout;
using std::endl;

int main(int argc, char* argv[])
{
    if (argc > 3 || argc == 1)
    {
        cout << "请输入当前目录下需要拷贝到linux日常练习的目标文件夹名或者要修改的名字;" << endl;
        exit(1); 
    }
    int status;
    // 修改目标文件名
    if(argc == 3)
    {
        if (fork() == 0)
        {
            // mv 目标文件名 修改的名字
            execlp("mv", "mv", argv[1], argv[2], NULL);
            exit(1);  // 执行失败返回1
        }
        wait(&status);
        if (WEXITSTATUS(status) == 1) cout << "修改名字执行失败" << endl;
        else cout << "执行完毕 [" << argv[1] << "==" << argv[2] << endl;
    }

    // 执行拷贝到目标文件夹操作
    if (fork() == 0)
    {
        // cp -rf "" "/home/QiHai/linux_-test/linux日常练习"
        if (argc == 2) execlp("cp", "cp", "-rf", argv[1], "/home/QiHai/linux_-test/linux日常练习", NULL);
        else execlp("cp", "cp", "-rf", argv[2], "/home/QiHai/linux_-test/linux日常练习", NULL);
        exit(2);  // 执行失败返回1
    }
    wait(&status);
    if (WEXITSTATUS(status) == 2) cout << "拷贝失败执行失败" << endl;
    else cout << "执行完毕 [" << argv[1] << "->/home/QiHai/linux_-test/linux日常练习]" << endl;

    // 修改原名
    if (argc == 3)
    {
        if (fork() == 0)
        {
            // mv 目标文件名 修改的名字
            execlp("mv", "mv", argv[2], argv[1], NULL);
            exit(3);  // 执行失败返回1
        }
        wait(&status);
        if (WEXITSTATUS(status) == 3) cout << "修改原本名字执行失败" << endl;
    }

    return 0;
}
